/*
 * Copyright (c) 2022-2022 All rights Reserved.
 */

package com.driving.core.util;

import lombok.Getter;

/**
 * 请求结果集
 *
 * @author SAGITTAR
 * @since 2017
 */
@Getter
public class Response<T> {

    private final boolean result;

    private final String message;

    private final T data;

    protected Response(boolean result, String message, T data) {
        this.result = result;
        this.message = message;
        this.data = data;
    }

    /**
     * 请求成功，返回基本结果，不含数据
     *
     * @return 请求成功
     */
    public static <T> Response<T> success() {
        return new Response<>(true, null, null);
    }

    /**
     * 请求成功，返回数据结果
     *
     * @param data 返回数据
     * @return 请求成功
     */
    public static <T> Response<T> success(T data) {
        return new Response<>(true, null, data);
    }

    /**
     * 请求失败，返回错误信息
     *
     * @param message 错误信息
     * @return 请求失败
     */
    public static <T> Response<T> failure(String message) {
        return new Response<>(false, message, null);
    }

    /**
     * 请求失败，返回错误信息
     *
     * @param e 异常对象
     * @return 请求失败
     */
    public static <T> Response<T> failure(Exception e) {
        return new Response<>(false, e.getLocalizedMessage(), null);
    }
}
